package com.example.spring.dao.sys;



import com.example.spring.common.MyBatisDao;
import com.example.spring.dao.CrudDao;
import com.example.spring.entity.User;
import com.example.spring.utils.UserOthProObj;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 用户DAO接口
 *
 * @author ThinkGem
 * @version 2014-05-16
 */
@MyBatisDao
public interface UserDao extends CrudDao<User> {

    /**
     * 根据登录名称查询用户
     *
     * @return
     */
    public User getByNo(User user);


    /**
     * 获得用户的最大id
     *
     * @return
     */
    public int getMaxUserId();

    /**
     * 通过OfficeId获取用户列表，仅返回用户id和name（树查询用户时用）
     *
     * @param user
     * @return
     */
    public List<User> findUserByOfficeId(User user);

    /**
     * 查询全部用户数目
     *
     * @return
     */
    public long findAllCount(User user);

    /**
     * 更新用户密码
     *
     * @param user
     * @return
     */
    public int updatePasswordById(User user);

    /**
     * 更新登录信息，如：登录IP、登录时间
     *
     * @param user
     * @return
     */
    public int updateLoginInfo(User user);

    /**
     * 删除用户角色关联数据
     *
     * @param user
     * @return
     */
    public int deleteUserRole(User user);

    /**
     * 插入用户角色关联数据
     *
     * @param user
     * @return
     */
    public int insertUserRole(User user);

    /**
     * 更新用户信息
     *
     * @param user
     * @return
     */
    public int updateUserInfo(User user);

    /**
     * 通过职工编号更新用户officeID，
     *
     * @param officeid
     * @param userNo
     * @return
     */
    public void updateUserOfficeIdByNo(@Param("officeid") String officeid, @Param("userNo") String userNo);

    /**
     * 通过职工编号更新用户用户状态
     *
     * @param userStatus
     * @param userNo
     * @return
     */
    public void updateUserStatusByNo(@Param("userStatus") String userStatus, @Param("userNo") String userNo);


    /**
     * 获取用户最大ID值
     */
    public UserOthProObj getUserMaxNo(UserOthProObj userOthProObj);

    /**
     * 插入用户菜单关联数据
     *
     * @param id
     * @param menuId
     * @return
     */
    public int addUserMenu(@Param("id") String id, @Param("menuId") String menuId);

    /**
     * 删除用户菜单关联数据
     *
     * @param id
     * @return
     */
    public int deleteUserMenu(@Param("id") String id);

    /**
     * 更新用户管理渠道
     */
    public int updateManageChannel(User user);


    /**
     * 根据登录名、邮箱、手机查询用户
     *
     * @return
     */
    public User getByNoOrMobileOrEmail(User user);


    /**
     * 通过no进行查询，返回所有的用户编号和名称map集合
     *
     * @param no
     * @return
     */
    public List<User> findUserInfoList(List<String> no);

    /**
     * 通过no进行查询，返回用户信息
     *
     * @param no
     * @return
     */
    public User findUserInfo(String no);


    /**
     * 定制根据查询查询用户分页列表
     *
     * @param user
     * @return
     */
    public List<User> findUserPageList(User user);
    /**
     * 删除机构下的人员与角色关联信息
     */
    public int deleteOrgUserRole(User user);

    /**
     * 获取机构下的用户信息
     */
    public User selectOrgUser(User user);

    /**
     * 测试通过文件直接导入指定的数据库表中  load data infile
     * @param map 可以指定要插入的列
     * @return
     */
    public void saveTest();

}
